package interfaceConsole;

/**
 * Impressao
 *
 * @author Bruna
 * @since 08/01/2013
 * @version 1.0
 */
import com.sun.org.apache.bcel.internal.generic.FNEG;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.InputMismatchException;
import regraDeNegocio.Cantil;
import regraDeNegocio.Entreposto;

public class Impressao {

    private Narrativa narrativa;
    private Entreposto entreposto;
    private ProcessarTexto processar;
    final private int PONTOS_PERDIDOS_AO_ANDAR = 10;//constante com o valor de pontos a perder quando caminha

    public Impressao() {
        narrativa = new Narrativa();
        entreposto = new Entreposto();
    }

    public void imprimirEstacao(int estacao) throws FileNotFoundException, URISyntaxException, IOException, InputMismatchException {//METODO DIVIDO EM CASE PELO SWITCH OU SEJA O MAIN CHAMA ELE E COMO PARAMETRO ISERE UMA ESTAÇÂO

        switch (estacao) {
            case 1://CASO 01 DESCREVE BOAS VINDAS PARA O PERSONAGEM  E TAMBEM RECUPERA O NOME 
                narrativa.getMensageiro().setPosicaoAtual(0);

                processar = new ProcessarTexto("1ºparte", 3);
                System.out.println("Mensageiro, informe seu nome: ");
                String dado = narrativa.entradaDeDadosTexto();
                narrativa.getMensageiro().setNome(dado);
                narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);//Perdeu porque andar
                System.out.println();

                narrativa.feedUsuario();
                break;
            case 2:
                System.out.println("\"Correspondente: " + narrativa.getMensageiro().getNome() + ", você foi incubido de entregar uma \n"
                        + " importante correspondência ao presidente da república, o qual encontra-se na sede do município de Alegrete.\n"
                        + "\n" + " " + narrativa.getMensageiro().getNome() + " : mas como chegarei a sede do município,\n"
                        + " se vários soldados imperiais estarão fazendo buscas e fechando \n"
                        + " as vias rápidas de acesso a cidade? \"\n ");
                System.out.println();
                System.out.println();
                break;
            case 3:
                processar = new ProcessarTexto("2ºparte", 6);
                System.out.println(" " + narrativa.getMensageiro().getNome() + ": Missão aceita!");
                System.out.println();
                narrativa.feedUsuario();

                System.out.println("PRIMEIRO DIA:");
                System.out.println(" \" " + narrativa.getMensageiro().getNome() + ": de posse de seus poucos suprimentos de água e comida, sua adaga, mapa e\n"
                        + "mensagem, parte o mensageiro para cumprir sua jornada e chegar até a sede do município durante os previstos 10 dias\n"
                        + " escolha seu caminho.\"");

                System.out.println();
                System.out.println();
                break;
            case 4:
                processar = new ProcessarTexto("3ºparte", 5);
                System.out.println();
                narrativa.feedUsuario();
                processar = new ProcessarTexto("4ºparte", 7);
                System.out.println();
                narrativa.feedUsuario();
                System.out.println();
                processar = new ProcessarTexto("5ºparte", 10);
                narrativa.feedUsuario();
                System.out.println("TERCEIRO DIA:");
                narrativa.feedUsuario();
                System.out.println(" " + narrativa.getMensageiro().getNome() + ": ----> ecolha seu caminho!\n");
                System.out.println("Digite [1] para seguir pelo estrada do deserto");
                System.out.println("Digite [2] para seguir pelo estrada do charco");
                break;
            case 5:
                try {
                    int opcoesDesertoOuCharco = narrativa.entradaDeDadosInteira();
                    narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);//Perdeu porque andar
                    //ESCOLHA
                    if (opcoesDesertoOuCharco == 1) {
                        narrativa.getMensageiro().setPosicaoAtual(1);
                        narrativa.paradaInventario(narrativa.getMensageiro().getPosicaoAtual());

                        System.out.println("\nVocê escolheu a estrada do deserto como seu caminho:");
                        narrativa.getLocal().deserto();
                        narrativa.paradaEncherCantil();

                        //cantil 1
                        int indexFirstCantil = 0;
                        Cantil c1;
                        for (int i = 0; i < narrativa.getMensageiro().getItens().length; i++) {
                            if (narrativa.getMensageiro().getItens()[i] instanceof Cantil) {
                                c1 = (Cantil) narrativa.getMensageiro().getItens()[i];
                                c1.setCantilStatus(true); //encheu cantis
                                indexFirstCantil = i++;
                                break;
                            }
                        }

                        //cantil extra
                        Cantil c2;
                        for (int i = indexFirstCantil; i < narrativa.getMensageiro().getItens().length; i++) {
                            if (narrativa.getMensageiro().getItens()[i] instanceof Cantil) {
                                c2 = (Cantil) narrativa.getMensageiro().getItens()[i];
                                c2.setCantilStatus(true); //encheu cantis
                                break;
                            }
                        }

                        narrativa.getDesafio().atravessarDeserto(c1.getCantilStatus(), c2.getCantilStatus());

                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);//Perdeu mais 10
                        entreposto.paradaEntreposto();

                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                        entreposto.paradaEntreposto();

                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                        //PERDE 80 PORQUE È DESERTO
                        narrativa.getMensageiro().perderPontosDeVida(80);

                        processar = new ProcessarTexto("2ºDIA DESERTO", 5);//alerta para ele verificar recursos
                        narrativa.feedUsuario();

                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                        entreposto.paradaEntreposto();
                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                        entreposto.paradaEntreposto();
                    }

                    //CHARCO 

                    if (opcoesDesertoOuCharco == 2) {

                        narrativa.getMensageiro().setPosicaoAtual(2);
                        narrativa.paradaInventario(narrativa.getMensageiro().getPosicaoAtual());
                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                        entreposto.paradaEntreposto();
                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);


                        System.out.println("\nVocê escolheu a estrada do charco como seu caminho:");
                        System.out.println("Digite [1] para verificar tempo, ou [2] para prosseguir");

                        int opcoesClima = narrativa.entradaDeDadosInteira();
                        if (opcoesClima == 1) {
                            System.out.println("Sua previsão: " + narrativa.getMensageiro().preverTempo());
                            narrativa.getLocal().charco();
                            narrativa.getLocal().getClima();
                        }
                        if (opcoesClima == 2) {
                        }
                        if (opcoesClima != 1 && opcoesClima != 2) {
                            System.err.println("Opção Inválida, jogo finalizado. Game Over");
                            System.exit(0);
                        }
                        processar = new ProcessarTexto("1ºDIA CHARCO", 4);
                        int opcoesNorteOuSul = narrativa.entradaDeDadosInteira();

                        entreposto.paradaEntreposto();
                        narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);

                        if (opcoesNorteOuSul == 1) {

                            narrativa.getMensageiro().setPosicaoAtual(2.1);
                            narrativa.paradaInventario(narrativa.getMensageiro().getPosicaoAtual());
                            narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                            System.out.println("\n Você optou pelo caminho norte");
//TEMPO SECO ELE VIVE È O NORTE
                            if (narrativa.getLocal().getClima().equalsIgnoreCase("tpSol")) {
                                narrativa.getMensageiro().perderPontosDeVida(60);
                                narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                                entreposto.paradaEntreposto();
                                narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                                entreposto.paradaEntreposto();
                                narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);

                                boolean finalizar = narrativa.getDesafio().verificarCharcoNorte();
                                if (finalizar == true) {
                                    narrativa.fim();
                                }
                            }

                            if (narrativa.getLocal().getClima().equalsIgnoreCase("tpChuva")) {
                                System.out.println("Você foi levado pela corredeira, pois o tempo está chuvoso...");
                                narrativa.morteMensageiro();
                            }


                        }
                        if (opcoesNorteOuSul == 2) {
                            narrativa.getMensageiro().setPosicaoAtual(2.2);
                            narrativa.paradaInventario(narrativa.getMensageiro().getPosicaoAtual());
                            narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                            System.out.println("\n Você optou pelo caminho sul");
                            narrativa.getMensageiro().perderPontosDeVida(70);
                            narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                            entreposto.paradaEntreposto();
                            narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);
                            entreposto.paradaEntreposto();
                            narrativa.getMensageiro().perderPontosDeVida(PONTOS_PERDIDOS_AO_ANDAR);

                            boolean finalizar = narrativa.getDesafio().verificarCharcoSul();
                            if (finalizar == true) {
                                boolean naoMorrer = narrativa.paradaCanoa();
                                if (naoMorrer == true) {
                                    System.out.println("Você consiguiu atravessar a corredeira..." + "\n");
                                    narrativa.fim();//UMA IDEIA
                                } else {
                                    System.err.println("Você morreu afogado, game over!");
                                    System.exit(0);
                                }

                            }
                        }
                        if (opcoesNorteOuSul != 1 && opcoesNorteOuSul != 2) {
                            System.err.println("Opção Inválida, jogo finalizado. Game Over");
                            System.exit(0);
                        }
                    } else {
                        System.err.println("Opção Inválida, jogo finalizado. Game Over");
                        System.exit(0);
                    }
                } catch (InputMismatchException erro) {
                    System.err.println("\n" + "Exception: " + erro + "\n" + "Usuário, por favor digite apenas números..."
                            + "\n" + "Jogo finalizado, game over");
                    System.exit(0);
                }
                System.out.println();
                System.out.println();
                break;
            default:
                System.err.println("Erro de execução");
                break;
        }
    }
}